This invention relates to software and more specifically to data models as they are used to represent information in application programs and databases.
Software systems, especially large ones, suffer from a variety of problems in their development, use, and adaption to new requirements. Programs tend to be complex and obscure. Interfaces to functionality tend to be numerous, specialized, and hard to coordinate. Data structures tend to reflect indirectly the information they represent. Independently developed data structures and applications tend to interact only with the help of elaborate conversion subsystems.
The choice and variety of data models used can affect the severity experienced with these problems. A data model is that part of a language (i.e., a type of interface to functionality) which defines the permissible structures for subject matter of the language. For example, operations described using relational database languages necessarily talk about tables of tuples. Programs written in APL necessarily talk about integer indexed arrays. Programs written in PL/1 talk about a wider variety of data structures, composed from records, arrays, pointers, strings, etc.
Languages tend to have one of two general kinds of data models, each with different limitations. Some languages such as relational database languages and APL are "functionally expressive." They can be used to express many operations on large aggregates of data all in a single statement. However, each such language has a very limited range of data structures allowing accurate representation of conceptual structures for only a narrow class of applications. Operations in such languages tend to be complicated by a need to deal with special conventions used to adapt the conceptual structures of the application to the limited available data structures in the language.
Other languages such as PL/1 and COBOL have a greater ability to represent rich structures accurately. They may be described as "structurally expressive." However, the variety of elementary data structures used in such a language makes it impractical to also provide powerful nested operations on large data aggregates within a language of manageable size. The lack of powerful operations leads to complications of expression in the language of a different kind.
One object of the present invention is to provide a data model on which it is possible to design interfaces to functionality which largely eliminates both those kinds of complication.
It is also an object of the present invention to simplify interfaces to functionality.